package mercadologico.entities.tables;

import java.util.ArrayList;
import java.util.Collection;

import exceptions.PersistenceExceptionMessage;
import generic.interfaces.GenericPersistence;
import generic.interfaces.IDEntity;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import mercadologico.dao.PersistenceSimilar;

@Entity
public class Similaridade implements IDEntity<Integer>, GenericPersistence<PersistenceSimilar, Integer, Similaridade> {
	
	public static PersistenceSimilar persist = new PersistenceSimilar();
	
	@Id
	@GeneratedValue
	private Integer id;
	private String descricao;
	@OneToMany(mappedBy = "similaridade", cascade=CascadeType.ALL)
	private Collection<Produto> produtos;

	
	public Integer getId() {
		return this.id;
	}
	
	public void setId(Integer id) {
		this.id = id;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
		if (getProdutos().size() > 0) {
			for (Produto produto: getProdutos()) {
				produto.setDescricaoCompleta(descricao);
			}
		}
	}
	public Collection<Produto> getProdutos() {
		if (produtos == null) {
			produtos = new ArrayList<Produto>();
		}
		return produtos;
	}
	public ArrayList<Produto> getArrayListProdutos() {
		ArrayList<Produto> prod = new ArrayList<Produto>();
		for (Produto produto : getProdutos()) {
			prod.add(produto);
		}
		return prod;
	}
	public void setProdutos(Collection<Produto> produtos) {
		if (produtos != null) {
			for (Produto produto : produtos) {
				produto.setSimilaridade(this);
			}
			if (produtos.size() > 0)
				setDescricao(((ArrayList<Produto>)produtos).get(0).getDescricaoCompleta());
			this.produtos = produtos;
		}
	}
	public void addProduto(Produto produto) {
		if (produto != null) {
			produto.setSimilaridade(this);
			setDescricao(produto.getDescricaoCompleta());
			getProdutos().add(produto);
		}
	}
	
	public PersistenceSimilar DAOInstance() throws PersistenceExceptionMessage {
		if (persist == null) {
			persist = new PersistenceSimilar();
		}
		return persist;
	}

	
	public Similaridade find(Integer id) throws PersistenceExceptionMessage {
		// TODO Auto-generated method stub
		return null;
	}

	
	public void persist() throws PersistenceExceptionMessage {
		DAOInstance().persist(this);
	}

	
	public void remove() throws PersistenceExceptionMessage {
		// TODO Auto-generated method stub
		
	}

	
	public Similaridade merge() throws PersistenceExceptionMessage {
		return DAOInstance().merge(this);
	}

	
	public ArrayList<Similaridade> findAll() throws PersistenceExceptionMessage {
		// TODO Auto-generated method stub
		return null;
	}
}
